/** 其他格式转化为条件数据 */
const deepClone = require('clone')
/** 云风表单格式转化为条件数据
 * @param {formDesc} 表单配置信息
 * @param {formEngineBuiltInNames} 控件对应 如果控件类型在此类型中存在 则需要加上 yf- 标识
 * @param {excludeCompnentTypes} 这个数组中存在的控件类型会被过滤掉  有默认数据 可以不传
 */
const formDescConversion = function (formDesc, formEngineBuiltInNames, excludeCompnentTypes, topPage, expandConditionList) {
  if (!excludeCompnentTypes) {
    excludeCompnentTypes = ['dbcq-batch-code', 'serial-number', 'file-upload', 'image-upload', 'yf-calculation', 'yf-editable-list', 'form-group', 'form-panel', 'divider', 'draggle-panel', 'tabs']
  }

  let formItems = formDesc.reduce((pre, item) => {
    // 如果当前控件是查询控件才处理
    if (item.columnConfig?.field?.conditon) {
      // 处理配置
      pre.push({
        // 文本
        label: item.label,
        // 下拉选的的值
        value: item.key,
        // 数据类型
        dataType: item.columnConfig.field.type,
        // 控件信息
        controlInfo: {
          // 控件类型
          type: item.type,
          // 控件数据源
          options: item.options,
          // attrs属性
          desc: {
            _attrs: item
          }
        },
        // 中间逻辑信息
        condition: (item.operators && item.operators.map(operator => ({
          label: operator.label,
          value: operator.value,
          component: operator.component?.type ? operator.component : {type : item.type, config: item}
        }))) || []
      })
    }
    return pre
  }, [])
  let expand = [
    {
      'label': '提交人机构',
      'value': 'unit',
      'dataType': 'unit',
      'controlInfo': {
        'type': 'yf-selectUnit-multiple'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    },
    {
      'label': '提交人',
      'value': 'user',
      'dataType': 'user',
      'controlInfo': {
        'type': 'yf-selectUser-multiple'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    },
    {
      'label': '提交人角色',
      'value': 'role',
      'dataType': 'role',
      'controlInfo': {
        'type': 'yf-select-role'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    }
  ]
  if (expandConditionList) {
    expand = expandConditionList
  }
  /** 拼接最终数据 */
  const result = [
    {
      groupName: '业务字段',
      groupId: '0',
      conditionList: formItems
    },
    {
      groupName: '用户信息',
      groupId: '7',
      conditionList: expand
    }
  ]
  if (topPage?.showConditionCustom) {
    result.push(
      {
        groupName: '自定义',
        groupId: '14',
        conditionList: [
          {
            label: '自定义',
            value: '-1',
            condition: [],
            controlInfo: {
              type: 'yf-input',
              placeholder: '请输入内容',
              disabled: false
            }
          }
        ]
      }
    )
  }
  return result
}

export default {
  // 云风表单格式转化为条件数据
  formDescConversion
}